﻿using System;
using System.Collections.Generic;
using System.Linq;
using RFMS;

namespace BU
{
    public class Reservatie
    {
        public string KlantNaam { get; set; }
        public bool Actief { get; set; }
        public DateTime Datum { get; set; }

        private ModelRFMSContainer _container;
        public Reservatie()
        {
            _container = ModelRFMSContainer.GetInstance();
        }

        public void ReservatieToevoegen(string tafelNaam, DateTime datum, 
            string naamKlant)
        {
            RFMS.Reservatie reservatie = new RFMS.Reservatie();
            reservatie.ReservatieDatum = datum;
            reservatie.NaamKlant = naamKlant;
            reservatie.Actief = true;
            reservatie.Tafel = TafelId(tafelNaam);
            _container.ReservatiesSet.AddObject(reservatie);
            _container.SaveChanges();
        }

        private RFMS.Tafel TafelId(string tafelnaam)
        {
            RFMS.Tafel tafel = new RFMS.Tafel();

            var tt = from t in _container.TafelSet
                     where t.Naam == tafelnaam && t.Actief == true
                     select t;
            foreach (var taf in tt)
            {
                tafel = taf;
            }
            return tafel;
        }

        public void ReservatieVerwijderen(string klantNaam, string tafelNaam)
        {
            var reservatie = _container.ReservatiesSet.FirstOrDefault
                (p => p.NaamKlant == klantNaam && p.Tafel.Naam == tafelNaam);
            reservatie.Actief = false;
            _container.SaveChanges();
        }

        public List<List<object>> ReservatieOphalen()
        {
            var reservatieOverzicht = from c in _container.ReservatiesSet
                                      where c.Actief == true
                                      select c;

            var lijst = new List<List<object>>();

            foreach (var reservatie in reservatieOverzicht)
            {
                lijst.Add(new List<object> { reservatie.Id, reservatie.NaamKlant, 
                    reservatie.ReservatieDatum, reservatie.Tafel.Naam });
            }

            return lijst;
        }

        public List<List<object>> ReservatieOphalen(DateTime datum)
        {
            var reservatieOverzicht = from c in _container.ReservatiesSet
                                      where c.Actief == true && c.ReservatieDatum == datum
                                      select c;

            var lijst = new List<List<object>>();

            foreach (var reservatie in reservatieOverzicht)
            {
                lijst.Add(new List<object> { reservatie.Id, reservatie.NaamKlant, 
                    reservatie.ReservatieDatum, reservatie.Tafel.Naam });
            }

            return lijst;
        }

        public List<List<object>> ReservatieOphalen(string tafelNaam)
        {
            var reservatieOverzicht = from c in _container.ReservatiesSet
                                      where c.Actief == true && c.Tafel.Naam == tafelNaam
                                      select c;

            var lijst = new List<List<object>>();

            foreach (var reservatie in reservatieOverzicht)
            {
                lijst.Add(new List<object> { reservatie.Id, reservatie.NaamKlant, 
                    reservatie.ReservatieDatum, reservatie.Tafel.Naam });
            }

            return lijst;
        }

        public List<List<object>> ReservatieOphalen(string tafelNaam, DateTime datum)
        {
            var reservatieOverzicht = from c in _container.ReservatiesSet
                                      where c.Actief == true && c.Tafel.Naam == tafelNaam 
                                      && c.ReservatieDatum == datum
                                      select c;

            var lijst = new List<List<object>>();

            foreach (var reservatie in reservatieOverzicht)
            {
                lijst.Add(new List<object> { reservatie.Id, reservatie.NaamKlant, 
                    reservatie.ReservatieDatum, reservatie.Tafel.Naam });
            }

            return lijst;
        }
    }
}
